Laravel:Structure du projet ,Migration ,Models
L'arichecture MVC(Model,View,Controller) d'un projet Laravel est la suivante
├── gestionVentes │ ├── app │ │ ├── Http │ │ ├── Controllers │ │ │ ├── ProduitController.php │ │ │ ├── ...les controllers font les traitements métiers │ ├── Models │ │ ├── Client.php │ │ ├── ...Les models comuniquent avec la BD ├── database │ ├── migrations │ │ ├── create_table_clients.php │ │ ├── ....permet de créer les tables dans la BD ├── resources │ ├── views │ │ ├── client │ │ │ ├── index.blade.php │ │ │ ├── create.blade.php │ │ │ ├── show.blade.php │ │ │ ├── edit.blade.php │ │ │ ├── .... ├── routes │ ├── web.php │ │ ├── contenant les routes: │ │ │ ├── Route::resource('clients', ClientController::class); │ │ │ ├── ...
Configuration de la base de données
Modifier le fichier .env pour configurer la base de données:DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=nom_de_votre_base_de_donnees DB_USERNAME=votre_nom_d_utilisateur DB_PASSWORD=votre_mot_de_passeExemple
Il faut créer la base de données GestionVentes dans mysql:
Create database gestionVentes
Puis modifier le fichiers .env dans le projet Laravel
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=gestionVentes DB_USERNAME=root DB_PASSWORD=
Model et Migration
Les relations dans Laravel font référence aux liens établis entre les modèles Eloquent, qui représentent des tables de base de données. Ces relations permettent de définir comment les enregistrements dans une table sont liés à ceux d'une autre table. Laravel offre plusieurs types de relations éloquentes qui simplifient la récupération et la manipulation de données associées.
Voici quelques-unes des relations les plus couramment utilisées dans Laravel :
BelongsTo (Appartient à) : Cette relation est utilisée pour définir une association où un modèle "appartient à" un autre modèle. Par exemple, un commentaire appartient à un article.
HasOne (A un) : Établit une relation où un modèle a exactement un autre modèle associé. Par exemple, un utilisateur a une seule adresse.
HasMany (A plusieurs) : Définit une relation où un modèle peut avoir plusieurs modèles associés. Par exemple, un article peut avoir plusieurs commentaires.
BelongsToMany (Appartient à beaucoup de) : Utilisé pour les relations plusieurs-à-plusieurs. Par exemple, un utilisateur peut appartenir à plusieurs rôles, et un rôle peut être associé à plusieurs utilisateurs.
HasManyThrough (A plusieurs à travers) : Permet d'accéder à des enregistrements associés à travers une relation intermédiaire. Par exemple, pour accéder aux commentaires d'un auteur à travers les articles.
MorphOne, MorphMany (Polymorphique un-à-un, Polymorphique un-à-plusieurs) : Utilisés pour créer des relations polymorphiques où un modèle peut être associé à plusieurs types de modèles différents.
MorphToMany, MorphedByMany (Polymorphique plusieurs-à-plusieurs) : Permettent de créer des relations polymorphiques plusieurs-à-plusieurs entre plusieurs modèles.
Les relations éloquentes facilitent la navigation entre les données associées, rendant le code plus lisible et permettant des opérations complexes avec un code concis et expressif. Ces relations sont définies dans les modèles Eloquent à l'aide de méthodes spécifiques, ce qui permet de créer des requêtes SQL complexes de manière transparente.
Étape 1 : Migration
├── database │ ├── migrations │ │ ├── create_table_clients.php
Elle contient des instructions pour créer la table "clients" avec les colonnes "idclient", "nom", "prenom", created_date,updated_date. La migration est responsable de définir la structure de la table dans la base de données.
database/migrations/create_clients_table.php
Étape 2 : Exécution de la migration
Étape 3 : Modèle (Model)
Le modèle est lié à la table "clients" à travers la propriété $table qui spécifie le nom de la table dans la base de données.
│ ├── Models │ │ ├── Client.php
Http/app/Models/Client.php
La propriété $timestamps indique si le modèle utilise des horodatages, par défaut à true. La propriété $fillable spécifie les colonnes de la table "clients" qui peuvent être remplies
Types de données
Voici la liste des type de données et attribut qu'on trouve dans Laravel :Command | Description |
---|---|
$table->bigIncrements('id'); | Incrementing ID (primary key) using a "UNSIGNED BIG INTEGER" equivalent. |
$table->bigInteger('votes'); | BIGINT equivalent for the database. |
$table->binary('data'); | BLOB equivalent for the database. |
$table->boolean('confirmed'); | BOOLEAN equivalent for the database. |
$table->char('name', 4); | CHAR equivalent with a length. |
$table->date('created_at'); | DATE equivalent for the database. |
$table->dateTime('created_at'); | DATETIME equivalent for the database. |
$table->decimal('amount', 5, 2); | DECIMAL equivalent with a precision and scale. |
$table->double('column', 15, 8); | DOUBLE equivalent with precision, 15 digits in total and 8 after the decimal point. |
$table->enum('choices', ['foo', 'bar']); | ENUM equivalent for the database. |
$table->float('amount'); | FLOAT equivalent for the database. |
$table->increments('id'); | Incrementing ID (primary key) using a "UNSIGNED INTEGER" equivalent. |
$table->integer('votes'); | INTEGER equivalent for the database. |
$table->json('options'); | JSON equivalent for the database. |
$table->jsonb('options'); | JSONB equivalent for the database. |
$table->longText('description'); | LONGTEXT equivalent for the database. |
$table->mediumInteger('numbers'); | MEDIUMINT equivalent for the database. |
$table->mediumText('description'); | MEDIUMTEXT equivalent for the database. |
$table->morphs('taggable'); | Adds INTEGER taggable_id and STRING taggable_type . |
$table->nullableTimestamps(); | Same as timestamps() , except allows NULLs. |
$table->rememberToken(); | Adds remember_token as VARCHAR(100) NULL. |
$table->smallInteger('votes'); | SMALLINT equivalent for the database. |
$table->softDeletes(); | Adds deleted_at column for soft deletes. |
$table->string('email'); | VARCHAR equivalent column. |
$table->string('name', 100); | VARCHAR equivalent with a length. |
$table->text('description'); | TEXT equivalent for the database. |
$table->time('sunrise'); | TIME equivalent for the database. |
$table->tinyInteger('numbers'); | TINYINT equivalent for the database. |
$table->timestamp('added_on'); | TIMESTAMP equivalent for the database. |
$table->timestamps(); | Adds created_at and updated_at columns. |
$table->uuid('id'); | UUID equivalent for the database. |